Embedded systems are subject to a variety of design constraints. Performance must be sufficient to meet the timing constraints for the application. Power consumption should be minimized, often to be less than a specified target. The size of read-only memory (ROM) may have rigid limits to minimize cost. Unfortunately, it is often difficult to improve one parameter without negatively affecting others. For example, increasing clock frequency to enhance performance also increases energy consumption. Likewise, code compression techniques may improve the code density, but may increase the execution time. In addition, voltage scaling reduces energy consumption, but at the cost of increased execution time. While energy consumption, code size, and execution time has been the prevailing design environment for embedded processors, the same design constraints may also apply to general-purpose processor design as well.